/**
 * -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
 * 
 * @fileoverview 快速操作页面上的Radio button,Drop list ，checkbook 的Jquery的插件
 *               {@link http://code.google.com/p/actionform/}
 * @author monlyu
 * @version 0.2
 * @see jquery >1.4
 * @since 2010-1-20
 *        -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
 */
(function($) {
	/** -=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=多次使用集成区-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= */
	$.apd = function(selc, av) {
		return selc.selector + av;
	};
	$.apdObj = function(selc, av) {
		return $($.apd(selc, av));
	};
	$.apdOption = function(selc){
		return $.apdObj(selc, ' option');
	}
	/** -=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=面是对Radio的操作-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= */
	$.fn.radio = function(val) {
		var obj = $(this);
		if (UtilJs.isEmpty(val)) {
			return $($.apd(obj, ':checked')).val();
		} else {
			if (UtilJs.isArray(val))
				return;
			$.getByVal(obj, val).attr('checked', 'checked');
		}
	};
	/** -=-=-=-=-=-=-=--=-=-=-=-=-=-=-下面是对checkbox的操作=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= */
	$.fn.checkbox = function(val) {
		var obj = $(this);
		if (UtilJs.isEmpty(val)) {
			var ary = [], c = 0;
			$($.apd($(this), ':checked')).each(function() {
				ary[c++] = $(this).val();
			});
			return ary;
		} else {
			if (UtilJs.isArray(val)) {
				for ( var opt in val) {
					$.getByVal(obj, val[opt]).attr('checked', 'checked');
				}
			} else {
				$.getByVal(obj, val).attr('checked', 'checked');
			}
		}
	};
	/**
	 * 反选
	 * 
	 * @version 0.1
	 */
	$.fn.inverse = function() {
		$(this).each(function() {
			if ($(this).attr('checked')) {
				$(this).removeAttr('checked');
			} else {
				$(this).attr('checked', 'true');
			}
		});
	};
	/**
	 * 全选
	 * 
	 * @version 0.1
	 */
	$.fn.checkAll = function() {
		$(this).each(function() {
			if (!$(this).attr('checked')) {
				$(this).attr('checked', 'true');
			}
		});
	};
	/** -=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-下面是对Select的操作-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= */
	/**
	 * 设置或获取选中值
	 * 
	 * @param {Object}
	 *            val
	 * @version 0.1
	 */
	$.fn.select = function(val) {
		var obj = $(this);
		if (UtilJs.isEmpty(val)) {
			return $(this).val();
		} else {
			if (UtilJs.isArray(val)) {
				val = val[0];
			}
			$(this).get(0).value = val;
		}
	};
	/**
	 * 获取选中的文本值
	 * 
	 * @version 0.1
	 */
	$.fn.sltTxt = function() {
		return $.apdObj($(this), ' option:selected').text();
	};
	/**
	 * 获取选择的Options的数量
	 * 
	 * @version 0.1
	 */
	$.fn.optsSize = function() {
		return $.apdOption($(this)).size();
	};
	/**
	 * 向list中添加一个Option，默认是加载最后 如果需要加到特定的位置 请用addOpt()
	 * 
	 * @param {Object}
	 *            txt 文本
	 * @param {Object}
	 *            val 值
	 * @parme {Object} index 位置 需要把他添加到第一个位置 则写2
	 * @version 0.1
	 * @overide 0.2
	 */
	$.fn.addOpt = function(txt, val, index) {
		if ($(this).isExistVal(val)) {
			return;
		}
		if (UtilJs.isEmpty(index)) {
			$(this).get(0).options.add(new Option(txt, val));
		} else {
			if (UtilJs.isNum(index)) {
				if ($(this).optsSize() > UtilJs.toInt(index)) {
					var intc = 0, flag = false;
					$.apdOption($(this)).each(function() {
						if ((intc + 1) == index) {
							$(this).before(new Option(txt, val));
							flag = true;
						}
						intc++;
					});
				}
				if (flag) {
					return;
				}
			}
			$(this).addOpt(txt, val);
		}
	};

	/**
	 * 改变Option的值
	 * 
	 * @param {Object}
	 *            val 值
	 * @param {Object}
	 *            tex 文本
	 * @param {Boolean}
	 *            byTxt 是否通过值去找文本
	 * @version 0.2          
	 */
	$.fn.altOptVal = function(val, tex, byTxt){
		$.apdOption($(this)).each(function(){
			if (byTxt) {
				if ($(this).text() == val) {
					$(this).val(tex);
				}
			} else {
				if ($(this).val() == val) {
					$(this).val(tex);
				}
			}
		});
	}
	/**
	 * 改变Option的文本
	 * 
	 * @param {Object}
	 *            val 值
	 * @param {Object}
	 *            tex 文本
	 * @param {Object}
	 *            byVal 是否通过值去找文本
	 * @version 0.2
	 */
	$.fn.altOptTxt = function(val, tex, byTxt){
		$.apdOption($(this)).each(function(){
			if (byTxt) {
				if ($(this).text() == val) {
					$(this).text(tex);
				}
			} else {
				if ($(this).val() == val) {
					$(this).text(tex);
				}
			}
		});
	}
	/**
	 * 把本select全部或部分 复制到其他Select中
	 * @param {Object} target 目标对象的ID值
	 * @param {Object} valueList 需要复制对象的一个option的值，或者是值串
	 * @version 0.2
	 */
	$.fn.copy = function(target, valueList){
		if (UtilJs.isEmpty(valueList)) {
			$('#' + target).html($(this).html());
		} else {
			if (UtilJs.isArray(valueList)) {
				for (var lop in valueList) {
					$.apdOption($(this)).each(function(){
						if ($(this).val() == valueList[lop]) {
							$('#' + target).append($(this).clone());
						}
					});
				}
			} else {
				$.apdOption($(this)).each(function(){
					if ($(this).val() == valueList) {
						$('#' + target).append($(this).clone());
					}
				});
			}
		}
	}
	/**
	 * 删除一个Option，根据val的值
	 * 
	 * @param {Object}
	 *            val 需要删除的option的值
	 * @param {Boolean}
	 *            isByTxt 是否根据文本删除
	 * 
	 * @version 0.2
	 */
	$.fn.delOpt = function(val, isByTxt) {
		if (UtilJs.isEmpty(val)) {
			return;
		}
		$.apdOption($(this)).each(function() {
			if (isByTxt) {
				if ($(this).text() == val) {
					$(this).remove();
				}
			} else {
				if ($(this).val() == val) {
					$(this).remove();
				}
			}
		});
	};
	/**
	 * 根据值来删除项
	 * 
	 * @param {Object}
	 *            val 需要删除的值
	 * @version 0.2
	 */
	$.fn.delOptByVal = function(val) {
		$(this).delOpt(val, false);
	};
	/**
	 * 根据现实内容来删除
	 * 
	 * @param {Object}
	 *            val 需要删除内容
	 * @version 0.2
	 */
	$.fn.delOptByTxt = function(val) {
		$(this).delOpt(val, true);
	};
	/**
	 * 返回含有当前下拉列表的所有Options值的数组
	 * 
	 * @version 0.1
	 */
	$.fn.sltValAry = function() {
		var ary = [], c = 0;
		$.apdOption($(this)).each(function() {
			ary[c++] = $(this).val();
		});
		return ary;
	};
	/**
	 * 清空下拉列表的所有option
	 * 
	 * @version 0.1
	 */
	$.fn.empSelect = function() {
		$(this).empty();
	};
	/**
	 * 判断下拉列表中是否有某个值
	 * 
	 * @param val
	 *            一个值或多个值
	 * @version 0.1
	 */
	$.fn.isExistVal = function(val) {
		var orilist = $(this).sltValAry();
		if (UtilJs.isArray(val)) {
			for ( var i in val) {
				if (!$(this).isExistVal(val[i])) {
					return false;
					break;
				}
			}
			return true;
		} else {
			for ( var m in orilist) {
				if (orilist[m] == val) {
					return true;
					break;
				}
			}
			return false;
		}
	};
	/**
	 * 获取当前选中项为第几的项,第一项为 0
	 * 
	 * @version 0.1
	 */
	$.fn.sltIndex = function() {
		return $(this).get(0).selectedIndex;
	};

	/** -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-公用的一些函数=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= */
	$.fn.disabled = function(vals) {
		var obj = $(this);
		if (UtilJs.isEmpty(vals)) {
			return $.eachVal($(this), false);
		} else {
			if (UtilJs.isArray(vals)) {
				for ( var opt in vals) {
					$.getByVal(obj, vals[opt]).attr('disabled', 'disabled')
				}
			} else {
				$.getByVal(obj, vals).attr('disabled', 'disabled')
			}
		}
	};
	$.fn.enabled = function(vals) {
		var obj = $(this);
		if (UtilJs.isEmpty(vals)) {
			return $.eachVal($(this), true);
		} else {
			if (UtilJs.isArray(vals)) {
				for ( var opt in vals) {
					$.getByVal(obj, vals[opt]).removeAttr('disabled');
				}
			} else {
				$.getByVal(obj, vals).removeAttr('disabled');
			}
		}
	};
	$.getByVal = function(obj, val) {
		return $($.apd(obj, '[value=' + val + ']'));
	};
	$.eachVal = function(selc, isEnable) {
		var ary = [], c = 0;
		selc.each(function() {
			if (isEnable) {
				if (!$(this).attr('disabled')) {
					ary[c++] = $(this).val();
				}
			} else {
				if ($(this).attr('disabled')) {
					ary[c++] = $(this).val();
				}
			}
		});
		return ary;
	};
	$.getType = function(selc) {
		var type = selc.attr('type');
		if (UtilJs.isEmpty(type)) {
			return;
		}
		return type;
	};
})(jQuery);

/**
 * 自己定义的一些工具类,某些函数是从0.1中提取出来的
 * 
 * @author monlyu
 * @version 0.2
 * @since 2010-1-20 
 */
var UtilJs = {
	/**
	 * 把一个Object对象转化为正整数,如果不是数字则返回0
	 * 
	 * @param {Object}
	 *            val
	 */
	toInt : function(val) {
		if (UtilJs.isNum(val)) {
			return parseInt(val);
		}
		return 0;
	},
	/**
	 * 判断一个参数是否为大于0的Number
	 * 
	 * @param {Object}
	 *            val
	 */
	isNum : function(val) {
		var num = Number(val);
		return num != NaN;
	},
	/**
	 * 判断输入的值是否为空,包括空字符串
	 * 
	 * @param {Object}
	 *            input
	 */
	isEmpty : function(input) {
		return (input == null || input == '' || input == undefined);
	},
	/**
	 * 判断输入的对象是否为数组
	 * 
	 * @param {Object}
	 *            input
	 */
	isArray : function(input) {
		return Object.prototype.toString.apply(input) === '[object Array]';
	}
};
